package com.hmall.item.config;

import com.hmall.feign.constants.MQConstants;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * RabbitMQ的配置类，创建元素
 */
@Configuration
public class RabbitConfig {

    /**
     * 创建交换机（路由交换机）
     * 参数一：名称
     * 参数二：是否持久化（存磁盘）
     * 参数三：是否自动删除
     */
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange(MQConstants.ITEM_EXCHANGE,true,false);
    }

    /**
     * 创建队列（新增/修改）
     */
    @Bean
    public Queue createInsertQueue(){
        return QueueBuilder.durable(MQConstants.ITEM_INSERT_QUEUE).build();
    }

    /**
     * 创建队列（删除）
     */
    @Bean
    public Queue createDeleteQueue(){
        return QueueBuilder.durable(MQConstants.ITEM_DELETE_QUEUE).build();
    }

    /**
     * 绑定新增队列
     */
    @Bean
    public Binding bindingInsertQueue(){
        /**
         * bind: 传入需要绑定队列对象
         * to: 绑定到哪个交换机对象
         * with: 需要绑定routingKey
         */
        return BindingBuilder.bind(createInsertQueue()).to(directExchange()).with(MQConstants.ITEM_INSERT_KEY);
    }

    /**
     * 绑定删除队列
     */
    @Bean
    public Binding bindingDeleteQueue(){

        return BindingBuilder.bind(createDeleteQueue()).to(directExchange()).with(MQConstants.ITEM_DELETE_KEY);
    }
}